package ui;

import java.io.File;

import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MenuItem;
import swing2swt.layout.BorderLayout;

import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.custom.SashForm;
/**
 * 
 * @author kbza
 *
 * Frame implementado con SWT. Falta implementar parte grafica de Arboles.
 */
public class TVFUI {

	protected Shell shlTvf;
	protected List list;
	protected Group grprbolDeBsqueda;
	protected Group grpSecuencia;
	protected Composite TreePanel;
	private final FormToolkit formToolkit = new FormToolkit(
			Display.getDefault());

	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			TVFUI window = new TVFUI();
			window.open();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shlTvf.open();
		shlTvf.layout();
		while (!shlTvf.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlTvf = new Shell();
		shlTvf.setSize(450, 374);
		shlTvf.setText("TVF");
		shlTvf.setLayout(new GridLayout(2, false));

		Menu menu = new Menu(shlTvf, SWT.BAR);
		shlTvf.setMenuBar(menu);

		MenuItem mntmNewSubmenu = new MenuItem(menu, SWT.CASCADE);
		mntmNewSubmenu.setText("Archivo");

		Menu menu_1 = new Menu(mntmNewSubmenu);
		mntmNewSubmenu.setMenu(menu_1);

		MenuItem mntmCargarDirectorio = new MenuItem(menu_1, SWT.NONE);
		mntmCargarDirectorio.setText("Cargar Directorio...");

		MenuItem mntmCargarArchivos = new MenuItem(menu_1, SWT.NONE);
		mntmCargarArchivos.setText("Cargar Archivos...");

		mntmCargarDirectorio.addSelectionListener(new OpenDirectory());
		mntmCargarArchivos.addSelectionListener(new OpenFile());

		MenuItem mntmAyuda = new MenuItem(menu, SWT.CASCADE);
		mntmAyuda.setText("Ayuda");

		Menu menu_2 = new Menu(mntmAyuda);
		mntmAyuda.setMenu(menu_2);

		Label lblArchivos = formToolkit.createLabel(shlTvf, "Archivos:",
				SWT.NONE);
		lblArchivos.setBackground(SWTResourceManager
				.getColor(SWT.COLOR_WIDGET_BACKGROUND));
		
		grprbolDeBsqueda = new Group(shlTvf, SWT.NONE);
		grprbolDeBsqueda.setText("Árbol de Búsqueda");
		grprbolDeBsqueda.setLayout(new FillLayout(SWT.HORIZONTAL));
		grprbolDeBsqueda.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
		formToolkit.adapt(grprbolDeBsqueda);
		formToolkit.paintBordersFor(grprbolDeBsqueda);
		
		TreePanel = new Composite(grprbolDeBsqueda, SWT.NONE);
		formToolkit.adapt(TreePanel);
		formToolkit.paintBordersFor(TreePanel);

		list = new List(shlTvf, SWT.BORDER);
		GridData gd_list = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1);
		gd_list.widthHint = 178;
		list.setLayoutData(gd_list);
		
		list.addSelectionListener(new SelectionListener() {
			
			@Override
			public void widgetSelected(SelectionEvent e) {
				 int[] selectedItems = list.getSelectionIndices();
			        String outString = "";
			        for (int loopIndex = 0; loopIndex < selectedItems.length; loopIndex++)
			          outString += selectedItems[loopIndex] + " ";
			        
				
			}
			
			@Override
			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO Auto-generated method stub
				
			}
		});

		grpSecuencia = new Group(shlTvf, SWT.NONE);
		grpSecuencia.setText("Navegación");
		grpSecuencia.setBackground(SWTResourceManager
				.getColor(SWT.COLOR_WIDGET_DARK_SHADOW));
		grpSecuencia.setLayout(new FillLayout(SWT.HORIZONTAL));
		GridData gd_grpSecuencia = new GridData(SWT.FILL, SWT.CENTER, true,
				false, 2, 1);
		gd_grpSecuencia.widthHint = 256;
		gd_grpSecuencia.heightHint = 26;
		grpSecuencia.setLayoutData(gd_grpSecuencia);
		formToolkit.adapt(grpSecuencia);
		formToolkit.paintBordersFor(grpSecuencia);

		Button btnInicio = new Button(grpSecuencia, SWT.NONE);
		formToolkit.adapt(btnInicio, true, true);
		btnInicio.setText("Inicio");

		Button btnAnterior = new Button(grpSecuencia, SWT.NONE);
		formToolkit.adapt(btnAnterior, true, true);
		btnAnterior.setText("Anterior");

		Button btnSiguiente = new Button(grpSecuencia, SWT.NONE);
		formToolkit.adapt(btnSiguiente, true, true);
		btnSiguiente.setText("Siguiente");

		Button btnFin = new Button(grpSecuencia, SWT.NONE);
		formToolkit.adapt(btnFin, true, true);
		btnFin.setText("Fin");

	}

	class OpenFile implements SelectionListener {

		@Override
		public void widgetSelected(SelectionEvent event) {
			FileDialog fd = new FileDialog(shlTvf, SWT.MULTI);
			fd.setText("Open");
			fd.setFilterPath("C:/");
			String[] filterExt = { "*.xml" };
			fd.setFilterExtensions(filterExt);

			String file = fd.open();

			if (file != null) {
				System.out.println(fd.getFilterPath());
				cargarLista(fd.getFileNames());
			}

		}

		@Override
		public void widgetDefaultSelected(SelectionEvent e) {
			// TODO Auto-generated method stub

		}
	}

	class OpenDirectory implements SelectionListener {

		@Override
		public void widgetSelected(SelectionEvent event) {
			DirectoryDialog dd = new DirectoryDialog(shlTvf);

			dd.setFilterPath("C:/");
			dd.setMessage("Please select a directory and click OK");

			String dir = dd.open();

			if (dir != null) {
				File d = new File(dir);
				cargarLista(d.list());
			}
		}

		@Override
		public void widgetDefaultSelected(SelectionEvent e) {
			// TODO Auto-generated method stub

		}
	}

	private void cargarLista(String[] files) {

		for (int i = 0; i < files.length; i++) {
			list.add(files[i]);
		}
	}
}
